package br.com.base.business;

import java.io.Serializable;
import java.util.List;

import br.com.base.model.UsuarioBase;
import br.com.base.model.impl.Entidade;
import br.com.base.persistencia.DAO.IGenericDAO;
import br.com.base.persistencia.filter.IFiltro;

/**
 * 
 * @author Milton Domingues
 *
 * @param <ENTIDADE>
 * @param <ID>
 * @param <FILTRO>
 * @param <REPOSITORIO>
 */
public interface Business<ENTIDADE extends Entidade<ID>, ID extends Serializable, FILTRO extends IFiltro, REPOSITORIO extends IGenericDAO<ENTIDADE, ID, FILTRO>> {

	public ENTIDADE buscar(ID id);

	public ENTIDADE buscarLoadLazy(ID id, String... params);

	public List<ENTIDADE> consultar(FILTRO filtro);

	public int consultarCount(FILTRO filtro);

	public void editar(ENTIDADE vo, UsuarioBase usuario);

	public void excluir(ENTIDADE entidade);

	public Class<ENTIDADE> getClassEntidade();

	public REPOSITORIO getRepositorioDAO();

	public void inserir(ENTIDADE vo, UsuarioBase usuario);

	public void resolverPerDependencias(ENTIDADE vo, UsuarioBase usuario);

	public void resolverPosDependencias(ENTIDADE vo, UsuarioBase usuario);

	public void resolverPreExcluir(ENTIDADE vo);

	public void tratarDadosEntidade(ENTIDADE vo);

	public void validarAlteracao(ENTIDADE entidade);

	public void validarExclusao(ENTIDADE entidade);

	public void validarInclusao(ENTIDADE entidade);

	public void validarUnicidade(ENTIDADE vo);

}
